home *** CD-ROM | disk | FTP | other *** search
/ Ian & Stuart's Australian Mac: Not for Sale / Another.not.for.sale (Australia).iso / fade into you / getting there / Apps / MOO-1.7.6.src / inc / db.h < prev    next >
Text File  |  1994-11-02  |  9KB  |  222 lines

  1. /******************************************************************************
  2.   Copyright (c) 1992 Xerox Corporation.  All rights reserved.
  3.   Portions of this code were written by Stephen White, aka ghond.
  4.   Use and copying of this software and preparation of derivative works based
  5.   upon this software are permitted.  Any distribution of this software or
  6.   derivative works must comply with all applicable United States export
  7.   control laws.  This software is made available AS IS, and Xerox Corporation
  8.   makes no warranty about the software, its performance or its conformity to
  9.   any specification.  Any person obtaining a copy of this software is requested
  10.   to send their name and post office or electronic mail address to:
  11.     Pavel Curtis
  12.     Xerox PARC
  13.     3333 Coyote Hill Rd.
  14.     Palo Alto, CA 94304
  15.     Pavel@Xerox.Com
  16.  *****************************************************************************/
  17.  
  18. #include "config.h"
  19. #include "structures.h"
  20.  
  21.  
  22. /**** db ****/
  23.  
  24. extern int in_child;
  25. enum flush_type {FLUSH_IF_FULL, FLUSH_ONE_SECOND, FLUSH_ALL_NOW, FLUSH_PANIC};
  26.  
  27. int    db_init(const char *, const char *); 
  28.   /* (in , out) returns 0 in normal case, non-zero for error */
  29.  
  30. int    db_flush(enum flush_type); 
  31. void    db_shutdown();
  32.  
  33. /**** objects ****/
  34. extern Objid    create_object(const char *, Objid, Objid);
  35.   /* (name, parent, owner).  Creates a new object with parent as its */
  36.   /* immediate ancestor. Returns new objects' id number */
  37.  
  38. extern void    destroy_object(Objid);
  39.                /* (object).  Destroy object, and frees prop vals,
  40.                   verbdefs, etc */
  41.  
  42. extern Var   do_change_parent(Objid, Objid);
  43.   /* (object, parent) */
  44. extern Var    change_parent(Objid, Objid, Objid);
  45.   /* ( object, parent, progr )  Changes object's parent to be parent, */
  46.   /* checking permissions and fixing properties as necessary */
  47.  
  48. extern Objid     renumber_object(Objid);
  49.                             /* (object) renumber object to be ne lowest
  50.                    free object number.  Returns new id number */
  51. extern int    obj_perm(Objid, Objid, int);
  52.   /* (player, object, action) */
  53.   /* checks if player can do a particular action on object. */
  54.  
  55. extern void    add_child(Objid /*parent*/, Objid /*new child*/);
  56. extern void    remove_child(Objid /*parent*/, Objid /*child*/);
  57. extern void    add_content(Objid /*location*/, Objid /*new content*/);
  58. extern void    remove_content(Objid /*location*/, Objid /*content*/);
  59.  
  60. /* - querying object values - */
  61.  
  62. extern int     valid(Objid);        /* returns if Objid exists */
  63. extern Objid    obj_owner(Objid);    /* returns the owner of Objid */
  64. extern const char *obj_name(Objid);  /* returns the name of Objid */
  65. extern Objid    obj_location(Objid); /* returns the location of Objid */
  66. extern Objid    obj_parent(Objid);   /* returns the parent of Objid */
  67. extern Objid    obj_child(Objid);    /* returns the first child of Objid */
  68. extern Objid    obj_sibling(Objid);  /* returns the next sibling of Objid */
  69. extern Objid    obj_contents(Objid); /* returns first 'content' object */
  70. extern Objid    obj_next_content(Objid); /* returns next object in
  71.                         content list after Objid */
  72. extern int      obj_flags(Objid);    /* returns the flags for Objid */
  73.  
  74. /* - setting object values - */
  75.  
  76. extern void     set_obj_owner(Objid, Objid); /* sets the owner */
  77. extern void     set_obj_name(Objid, const char *); /* sets the name */
  78. extern void    set_obj_location(Objid, Objid); /* sets the location */
  79. extern void     set_obj_parent(Objid, Objid); /* sets the parent */
  80. extern void     set_obj_child(Objid, Objid); /* sets the child list */
  81. extern void     set_obj_sibling(Objid, Objid); /* sets its sibling */
  82. extern void     set_obj_contents(Objid, Objid); /* sets the first content */
  83. extern void     set_obj_next_content(Objid, Objid); /* sets the next in the
  84.                                content list */
  85. extern void     set_obj_flags(Objid, int); /* sets the flags */
  86.  
  87. /**** properties *****/
  88.  
  89. extern Var get_property_list(Objid, Objid);
  90.   /* ( object, programmer ) */
  91.   /* returns list of properties defined on object in value, if allowed */
  92.  
  93. extern int has_property(Objid, const char *, Objid);
  94.   /* ( object, prop-name, programmer ) */
  95.   /* if programmer is allowed to check, */
  96.   /*returns 1 if object has prop-name, 0 otherwise */
  97.  
  98. extern enum error get_prop_val   (Objid, const char *, Var *, Objid, int);
  99.   /* ( object, prop_name, &Value, programmer, keep_clear) */
  100. extern enum error get_non_bi_prop(Objid, const char *, Var *, int);
  101. extern enum error get_prop_safe  (Objid, const char *, Var *, int);
  102.   /* ( object, prop_name, &Value, keep_clear ) -- safe, so no progr */
  103.  
  104.   /* fills in the value of the property requested, checking permissions in */
  105.   /* first instance, not in other two. */
  106.   /* if keep_clear is true, parent lookup will not be done for TYPE_CLEAR */
  107.   /* properties. */
  108.  
  109. extern enum error set_prop_val(Objid, const char *, Var, Objid);
  110.   /* ( object, prop_name, value, programmer) */
  111. extern enum error set_prop_safe(Objid, const char *, Var);
  112.   /* ( object, prop_name, value ) */
  113.  
  114.   /* sets the value of the property specified, checking permissions in */
  115.   /* the first instance */
  116.                        
  117. extern unsigned int str_hash(const char *);
  118.  
  119. extern Propdef    new_propdef(const char *);
  120.  
  121. extern enum error add_property(Objid, const char *, Objid, Var, Var);
  122.   /* ( object, prop-name, programmer, value, info ) */
  123.   /* Add property name to object with value, owner and permissions. */
  124.  
  125. extern enum error delete_property(Objid, const char *, Objid);
  126.   /* ( object, prop-name, programmer ) */
  127.   /* remove prop-name from object */
  128.  
  129. extern enum error set_prop_info(Objid, const char *, Objid, Var);
  130.   /* ( object, prop-name, programmer, info ) */
  131.   /* set the property owner and permissions */
  132.  
  133. extern Var get_prop_info(Objid, const char *, Objid);
  134.   /* ( object, prop-name, programmer ) */
  135.   /* return the property owner and permission */
  136.  
  137. /**** verbs ****/
  138.  
  139. extern Var get_verb_list(Objid, Objid);
  140.   /* (object, programmer ) */
  141.   /* returns list of verb names on an object */
  142.  
  143. extern enum error has_verb(Objid, const char *, Objid, int *);
  144.   /* ( object, verb-name, programmer, &answer ) */
  145.   /* checks if object has a verb with the name verb-name specifies */
  146.  
  147. extern enum error add_verb(Objid, Objid, Var, Var);
  148.   /* ( object, programmer, info, args ); */
  149.   /* checks permissions, and if allowed,  */
  150.   /* adds object:verb-name with verb info and args set */
  151.  
  152. extern enum error delete_verb(Objid, const char *, Objid);
  153.   /* ( object, verb-name, programmer ) */
  154.   /* checks permissions, and if allowed */
  155.   /* deletes object:verb-name */
  156.  
  157. extern enum error get_verb_code(Objid, const char *, Objid, Var *, int, int);
  158.   /* ( object, verb-name, programmer, &value, parens, indent ) */
  159.   /* returns verb code in value, if allowed */
  160.  
  161. extern Var set_verb_code(Objid, const char *, Objid, Var);
  162.   /* ( object, verb-name, programmer, value ) */
  163.   /*  sets verb code from value, if allowed */
  164.  
  165. extern Var get_verb_info(Objid, const char *, Objid);
  166.   /* ( object, verb-name, programmer ) */
  167.   /* returns the information about object:verb-name, after check permissions */
  168.  
  169. extern enum error set_verb_info(Objid, const char *, Objid, Var);
  170.   /* ( object, verb-name, programmer, value ) */
  171.   /* sets the verb-info object:verb-name to info out of value, after */
  172.   /* checking permissions */
  173.  
  174. extern Var get_verb_args(Objid, const char *, Objid);
  175.   /* ( object, verb-name, programmer, &value ) */
  176.   /* returns verb arguments in value, if allowed */
  177.  
  178. extern enum error set_verb_args(Objid, const char *, Objid, Var);
  179.   /* ( object, verb-name, programmer, value ) */
  180.   /* sets verb args from value, if allowed */
  181.  
  182. extern Program *get_program_and_pi(Objid, const char *, Parse_Info *, int);
  183.   /* ( object, verb-name, pi to fill in, match_options ) */
  184.  
  185. /* Note: A verbdef_info is not guaranteed to be valid for
  186.    very long after it is returned.  Retrieve the information
  187.    needed, and then don't use the handle any more. */
  188.  
  189. typedef struct verbdef_info {
  190.     void       *ptr;
  191.     Objid     vloc;
  192. } verbdef_info;
  193.  
  194. extern verbdef_info get_verbdef_info(Objid, const char *);
  195.   /* ( object, verb-name ) */
  196.   /* get the information about a verb */
  197.  
  198. extern verbdef_info verbdef_info_from_num(Objid, int);
  199.   /* ( object, verb-num ) */
  200.  
  201. extern int              verb_exists(verbdef_info);
  202. extern Program           *program_from_info(verbdef_info);
  203. extern void             set_program_in_info(verbdef_info, Program *);
  204. extern const char      *name_from_info(verbdef_info);
  205. extern Objid        owner_from_info(verbdef_info);
  206. extern int        perms_from_info(verbdef_info);
  207.  
  208. typedef struct verbref_info {
  209.     int        verbnum;
  210.     Objid    oid;
  211.     void    *ptr;
  212. } verbref_info;
  213.  
  214. extern verbref_info get_verbref_info(Objid, const char *);
  215.   /* ( player, "obj:verbname" ) */
  216.  
  217. extern int check_verbref_perms(verbref_info, Objid);
  218.   /* 1 = good permissions */
  219.  
  220. extern const char *verbref_name(verbref_info);
  221.   /* return the name of the verb in the verbref */
  222.